CloudWatch Agent でProcstatプラグインの利用が可能になりました
こんにちは 園部です。
前回、CloudWatchの複数設定ファイルと同じタイミングでリリースされた「Procstatプラグイン」について、書いていきます。
Amazon CloudWatch エージェントが Procstat プラグインおよび複数の設定ファイルのサポートを追加
前回投稿した「複数設定ファイル」をあわせて読んでいただくと理解しやすいかもしれません。
CloudWatch Agent が複数設定ファイルの利用が可能になりました
Procstat とは?
Linuxでは、/proc 配下にシステム上のリソース情報があります。 CPUやメモリ情報を確認するために、「/proc/cpuinfo」や「/proc/meminfo」を確認されたことがあるのではないでしょうか。
同じディレクトリ内に、数字のディレクトリがあり(プロセスID)、そちらにプロセスID単位での情報ファイルがあります。 その中の一つに「stat」があります。 ここには各プロセスの情報があります。
$ sudo ls /proc/3534/ attr comm fd loginuid mountstats oom_score_adj sched stack timers autogroup coredump_filter fdinfo map_files net pagemap schedstat stat timerslack_ns auxv cpuset gid_map maps ns patch_state sessionid statm uid_map cgroup cwd io mem numa_maps personality setgroups status wchan clear_refs environ latency mountinfo oom_adj projid_map smaps syscall cmdline exe limits mounts oom_score root smaps_rollup task
Procstatプラグインとは?
procstat プラグインでは、個別のプロセスからメトリクスを収集できます。このプラグインは、Linux サーバーと、Windows Server 2008 以降を実行するサーバーでサポートされます。
(中略)
procstat プラグインを使用するには、CloudWatch エージェント設定ファイルの metrics_collected セクションに procstat セクションを追加します。モニタリングするプロセスを指定するには 3 つの方法があります。これらの方法のうち使用できるのは 1 つのみですが、この 1 つの方法を使用して複数のプロセスを指定してモニタリングできます。
・pid_file: 作成するプロセス識別番号 (PID) ファイルの名前でプロセスを選択します。
・exe: 正規表現の照合ルールを使用して、指定した文字列と一致するプロセス名のプロセスを選択します。詳細については、「Syntax」を参照してください。
・pattern: プロセスの起動に使用するコマンドラインでプロセスを選択します。正規表現の照合ルールを使用して指定した文字列と一致するコマンドラインを持つすべてのプロセスが選択されます。コマンドで使用されるパラメータやオプションも含めて、コマンドライン全体がチェックされます。
以上の複数のセクションを含めた場合でも、CloudWatch エージェントで使用される方法は 1 つのみです。複数のセクションを指定すると、CloudWatch エージェントは pid_file セクションを使用します (ある場合)。これが存在しない場合は、exe セクションを使用します。
(公式ドキュメントより) https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-procstat-process-metrics.html
取得出来るメトリクスは以下の通りです。
メトリクス名 | 利用可能なサーバー | 説明 |
---|---|---|
cpu_time | Linux | プロセスで CPU を使用する時間。このメトリクスは、1/100 秒単位で測定されます。
単位: カウント |
cpu_time_system | Linux、Windows Server | プロセスがシステムモードになっている時間。このメトリクスは、1/100 秒単位で測定されます。
タイプ: 浮動小数点 単位: カウント |
cpu_time_user | Linux、Windows Server | プロセスがユーザーモードになっている時間。このメトリクスは、1/100 秒単位で測定されます。
単位: カウント |
cpu_usage | Linux、Windows Server | 任意の容量でプロセスがアクティブになっている時間の割合。
単位: パーセント |
memory_data | Linux | プロセスで使用するデータ用メモリの量。
単位: バイト |
memory_locked | Linux | プロセスがロックしているメモリの量。
単位: バイト |
memory_rss | Linux、Windows Server | プロセスが使用している実際のメモリ (常駐セット) の量。
単位: バイト |
memory_stack | Linux | プロセスが使用しているスタックメモリの量。
単位: バイト |
memory_swap | Linux | プロセスが使用しているスワップメモリの量。
単位: バイト |
memory_vms | Linux、Windows Server | プロセスが使用している仮想メモリの量。
単位: バイト |
read_bytes | Linux、Windows Server | プロセスがディスクから読み取ったバイト数。
単位: バイト |
write_bytes | Linux、Windows Server | プロセスがディスクに書き込んだバイト数。
単位: バイト |
read_count | Linux、Windows Server | プロセスが実行したディスク読み取りオペレーションの数。
単位: カウント |
write_count | Linux、Windows Server | プロセスが実行したディスク書き込みオペレーションの数。
単位: カウント |
involuntary_context_switches | Linux | プロセスのコンテキストが意図せずに切り替えられた回数。
単位: カウント |
voluntary_context_switches | Linux | プロセスのコンテキストが意図的に切り替えられた回数。
単位: カウント |
realtime_priority | Linux | プロセスで現在使用されているリアルタイム優先度。
単位: カウント |
nice_priority | Linux | プロセスで現在使用されている nice 優先度。
単位: カウント |
signals_pending | Linux | プロセスによる処理待ち中のシグナルの数。
単位: カウント |
rlimit_cpu_time_hard | Linux | プロセスの CPU 時間のハードリソース制限。
単位: カウント |
rlimit_cpu_time_soft | Linux | プロセスの CPU 時間のソフトリソース制限。
単位: カウント |
rlimit_file_locks_hard | Linux | プロセスのファイルロックのハードリソース制限。
単位: カウント |
rlimit_file_locks_soft | Linux | プロセスのファイルロックのソフトリソース制限。
単位: カウント |
rlimit_memory_data_hard | Linux | プロセスのデータ用メモリに関するハードリソース制限。
単位: バイト |
rlimit_memory_data_soft | Linux | プロセスのデータ用メモリに関するソフトリソース制限。
単位: バイト |
rlimit_memory_locked_hard | Linux | プロセスのロックされたメモリに関するハードリソース制限。
単位: バイト |
rlimit_memory_locked_soft | Linux | プロセスのロックされたメモリに関するソフトリソース制限。
単位: バイト |
rlimit_memory_rss_hard | Linux | プロセスの物理メモリに関するハードリソース制限。
単位: バイト |
rlimit_memory_rss_soft | Linux | プロセスの物理メモリに関するソフトリソース制限。
単位: バイト |
rlimit_memory_stack_hard | Linux | プロセススタックに関するハードリソース制限。
単位: バイト |
rlimit_memory_stack_soft | Linux | プロセススタックに関するソフトリソース制限。
単位: バイト |
rlimit_memory_vms_hard | Linux | プロセスの仮想メモリに関するハードリソース制限。
単位: バイト |
rlimit_memory_vms_soft | Linux | プロセスの仮想メモリに関するソフトリソース制限。
単位: バイト |
rlimit_nice_priority_hard | Linux | プロセスの nice 優先度値の上限に関するハードリソース制限。
単位: カウント |
rlimit_nice_priority_soft | Linux | プロセスの nice 優先度値の上限に関するソフトリソース制限。
単位: カウント |
rlimit_num_fds_hard | Linux | プロセスのファイル記述子に関するハードリソース制限。
単位: カウント |
rlimit_num_fds_soft | Linux | プロセスのファイル記述子に関するソフトリソース制限。
単位: カウント |
rlimit_realtime_priority_hard | Linux | プロセスのリアルタイム優先度値の上限に関するハードリソース制限。
単位: カウント |
rlimit_realtime_priority_soft | Linux | プロセスのリアルタイム優先度値の上限に関するソフトリソース制限。
単位: カウント |
rlimit_signals_pending_hard | Linux | プロセスへの配信待ち中のシグナル数に関するハードリソース制限。
単位: カウント |
rlimit_signals_pending_soft | Linux | プロセスへの配信待ち中のシグナル数に関するソフトリソース制限。
単位: カウント |
num_fds | Linux | プロセスが使用しているファイル記述子の数。
単位: カウント |
num_threads | Linux、Windows Server | プロセス内のスレッドの数。
単位: カウント |
pid | Linux、Windows Server | プロセス識別子 (ID)。
単位: カウント |
pid_count | Linux、Windows Server | プロセスに関連付けられたプロセス ID の数。
このメトリクス名は、Linux サーバーでは 単位: カウント |
やってみる
今回の想定した利用ケース
(1) まずは、常時監視する項目について、CloudWatch Agentにて、Agentインストール時に取得するメトリクスを指定し、監視を行います。
(2) その上で、特定プロセス(今回は、httpd)に関する調査を行う想定で、httpd用Procstatプラグイン設定の作成と適用を行い、メトリクスを取得します。
(3) 調査完了後に、対象サーバからProcstatプラグイン設定との紐付きを破棄します。
1. CloudWatch Agent 初期設定
初期設定については、以下などを参考に設定します。
新しいCloudWatch Agentでメトリクスとログの収集が行なえます
CloudWatch Agent が複数設定ファイルの利用が可能になりました
2. Prcostatプラグイン設定作成とアタッチ
Systems Manager パラメータストアに、Procstat専用項目の設定ファイルを作成します。
- pid_file にて、「httpd」を指定しています。
- 取得するメトリクスは、"measurement" で指定している項目となります。
- 取得する期間はデフォルト60秒です。(何も指定しないのでデフォルト)
{ "metrics": { "metrics_collected": { "procstat": [ { "pid_file": "/var/run/httpd/httpd.pid", "measurement": [ "cpu_time", "cpu_usage", "memory_locked", "memory_rss", "memory_vms", "num_threads", "pid", "pid_count" ] } ] } } }
対象サーバ内へログインして、設定ファイルを適用します。
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config -m ec2 -c ssm:Procstat -s
しばらくすると、CloudWatchに、processに関する項目が取得されます
取得したメトリクス(数値表示)です。
3. Prcostatプラグイン設定のデタッチ
対象サーバ内へログインして、Procstatプラグイン設定との紐付きを破棄します。
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a remove-config -m ec2 -c ssm:Procstat -s $ ls -l /etc/amazon/amazon-cloudwatch-agent/amazon-cloudwatch-agent.d 合計 4 -rwxr-xr-x 1 root root 1419 2月 5 04:07 ssm_AmazonCloudWatch-linux
まとめ
今回は、Procstatプラグインで、常時メトリクス取得するのではなく、調査などのスポットで利用することを想定しました。 Procstatプラグインで取得するメトリクスは、カスタムメトリクスのため有料ですので、ご注意ください。
また、プロセス数(pid_count)を取得することが出来るため、そちらをプロセス監視として利用するケースも考えられるかと思います。 大量のサーバに、多様な設定をするのは、難易度が高く、設定ファイルを複数に分けることやSystemesManagerをうまく利用することが必要となるかと思います。